#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
//int* findErrorNums(int* nums, int numsSize, int* returnSize);
//int cmp(const void* a, const void* b);
//int main()
//{
//    int i;
//    int* ret;
//    int* returnSize = NULL;
//    int nums[4] = {1,2,2,4};
//    ret=findErrorNums(nums, 2, returnSize);
//    for (i = 0; i < 2; i++)
//        printf("%d ", ret[i]);
//    return 0;
//}
//int cmp(const void* a, const void* b)
//{
//    int* A = (int*)a;
//    int* B = (int*)b;
//    return *A - *B;
//}
//int* findErrorNums(int* nums, int numsSize, int* returnSize)
//{
//    int i;
//    int* ret = NULL;
//    qsort(nums, numsSize, sizeof(nums[0]), cmp);
//    for (i = 1; i <= numsSize; i++)
//    {
//        if (nums[i - 1] != i)
//        {
//            ret = (int*)realloc(ret, 2 * sizeof(int));
//            ret[0] = i - 1;
//            ret[1] = i;
//        }
//    }
//    return ret;
//}
int* findErrorNums(int* nums, int numsSize, int* returnSize)
{
    int* hash;
    int* ret;
    int i;
    hash = (int*)malloc(numsSize * sizeof(int));
    ret = (int*)malloc(2 * sizeof(int));
    memset(hash, 0, sizeof(int));
    for (i = 0; i < numsSize; i++)
    {
        hash[nums[i]]++;
    }
    for (i = 0; i < numsSize; i++)
    {
        if (hash[i] == 2)
        {
            ret[0] = i;
            ret[1] = i + 1;
            break;
        }
    }
    *returnSize = 2;
    return ret;
}